{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# 决策树实验（MNIST & CIFAR-10）\n",
    "本实验将使用决策树模型对MNIST和CIFAR-10数据集进行分类任务，分析其表现并进行可视化。"
   ],
   "id": "7cc7746ec04cf384"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:18:53.327925Z",
     "start_time": "2025-06-10T03:18:47.913771Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms"
   ],
   "id": "5fba5b096cb87da7",
   "outputs": [],
   "execution_count": 1
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 加载数据集",
   "id": "b455504faae8196f"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:18:54.870131Z",
     "start_time": "2025-06-10T03:18:53.334931Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")"
   ],
   "id": "b462ca05a2145bc5",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 数据预处理",
   "id": "314b9e2e017a7ed2"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:19:09.776942Z",
     "start_time": "2025-06-10T03:18:55.095994Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 5000\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:1000], y_test_m[:1000]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:1000], y_test_c[:1000]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "id": "111ca6ecefeebc78",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 决策树模型训练与评估",
   "id": "8524a3718c267bfb"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:19:28.167617Z",
     "start_time": "2025-06-10T03:19:09.792730Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    acc = accuracy_score(y_test, y_pred)\n",
    "    cm = confusion_matrix(y_test, y_pred)\n",
    "    return acc, cm, y_pred\n",
    "\n",
    "# MNIST\n",
    "dt_mnist = DecisionTreeClassifier()\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(dt_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST 决策树准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "dt_cifar = DecisionTreeClassifier()\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(dt_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 决策树准确率: {acc_c:.3f}\")"
   ],
   "id": "7e190ab0af644d82",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST 决策树准确率: 0.755\n",
      "CIFAR-10 决策树准确率: 0.239\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "# 可视化分析",
   "id": "e5fd8deadec75d1e"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-10T03:19:28.518927Z",
     "start_time": "2025-06-10T03:19:28.213389Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('决策树在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "id": "f025ffb0bfd3fe9d",
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20915 (\\N{CJK UNIFIED IDEOGRAPH-51B3}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 31574 (\\N{CJK UNIFIED IDEOGRAPH-7B56}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 26641 (\\N{CJK UNIFIED IDEOGRAPH-6811}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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yMhQr15fXuWaNWuW3nvvPX300Ud+42+99VZVVVVp9+7dysrKUnZ2tu6++25J0v/8z//4hfBrr7122XXi8hCUCMgDDzygdevWaf369cZrNpJ08803Kz09XTk5Oe1e//jx4/Xggw/q1Vdf1datW7V161b993//95WWDVzS9ddfL5vN1uZL402ioqI0ZswY3zJw4ECdOXNGb775pn7xi1+oV69e6tWrl2JjY/XXv/71okk9/fr105gxY5SQkKDi4mLt3r3bd+SZnJzsF8J33nlnu2q6cM0zkNcSonUEJQJy++23q6mpSefPn/edTjJZtmyZ/uM//uOyromMGzdO0pez+4CONnjwYKWnp6uwsLDVv7m/vZWpPV577TVdc8012rt3r1/QPffcc1q3bp2am5tbHWe327Vw4UItWrRIn3/+ufr06eMXwgMGDGjX9keNGqWYmBi/1xJ6PB7t3r2b1xIGiKBEQEJCQnTw4EEdOHBAISEhl+w/YcIE3Xvvvb5rNm2ZO3eulixZovfee0/Hjh3Trl27lJmZqaFDh/KjRqcpLCxUc3OzUlJS9Otf/1p//vOfdfDgQa1atSrgv8M1a9boBz/4gcaPH++3zJ49W3V1dSotLW1z7D333KOQkBDjrR/nzp3zha/05eSdqqoqVVdXS5JsNpseeeQRPf3003rrrbe0b98+ZWZmasSIEZoxY0ZA+9LTEZQIWKBvY1+8ePElrzM6HA7t2rVL99xzj772ta/p7rvvVnh4uFwul4YMGXKlJQPtMnr0aFVWVurWW2/VT37yE40fP15Tp06Vy+XSSy+91O71VFRUaO/evb7rjH8rMjJS3/72t1ud1HNBr169NH/+fK1YsaLNMyrvv/++Jk6cqIkTJ0r68t2+EydOVG5urq/PY489poceekg//vGPNXnyZJ07d06lpaUKDw9v976A12wBAGDEESUAAAYEJQAABgQlAAAGBCUAAAYEJQAABgQlAAAGBCUAAAYEJQAABgQlAAAGBCUAAAYEJQAABgQlAAAG/w+OUQH1xae9ywAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_24168\\3282388306.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_24168\\3282388306.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_24168\\3282388306.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\Lenovo\\AppData\\Local\\Temp\\ipykernel_24168\\3282388306.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\python\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBUAAAHqCAYAAABbfXZsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0u0lEQVR4nO3deXgV9b0/8E8SIAQIqCgIigraCggqiFqkV6TFrWq1tu5WtJVbNSpKpUJ9VFxxKa1WW1Drdltwq9cNa324VhGquKFW/VlUrC0uiFYlLBJCcn5/9JJrCiTkG2DOMa/X85w/MmfOzDtDSD55Z2ZOUS6XywUAAABAExVnHQAAAAAoTEoFAAAAIIlSAQAAAEiiVAAAAACSKBUAAACAJEoFAAAAIIlSAQAAAEiiVAAAAACSKBUAAACAJEoFAAAAIIlSAdbBbbfdFkVFRVFUVBSzZs1a7flcLhc9evSIoqKiOPjgg+s9t+p1EydOXOt2n3/++bpl48ePj6Kiovj444/rrfvQQw/F0KFDo0uXLtGuXbvo1atXHHnkkfHHP/4xIiL22Wefun019Bg/fvx6OCIAwJfZvHnz4kc/+lH06tUr2rZtGx07dowhQ4bEtddeG59//nndetttt91aZ59/f2y55Zb11vvss8+ibdu2UVRUFK+//voac5x44on1tlFaWhpf/epX44ILLojly5ev0+fy7LPPxmmnnRa77bZbtG7dOoqKihpc/+abb44+ffpE27Zt4ytf+Upcd91167QfaKlaZR0ACknbtm1j6tSp8fWvf73e8hkzZsS7774bpaWla33t1VdfHaeeemq0a9euyfv92c9+FmPGjImhQ4fGuHHjol27dvHWW2/F//zP/8Sdd94ZBxxwQJx33nlx8skn173mueeei1/+8pfx05/+NPr06VO3fOedd17jPn7961/H6NGjo1WrNX9b2HzzzeOdd97JbD0AYON4+OGH44gjjojS0tI44YQTol+/frFixYqYNWtWjBkzJl577bW48cYbG9zGvvvuGyeccEK9ZWVlZfU+vueee+rKhilTpsSll166xm2VlpbGb37zm4iIWLRoUTzwwANxySWXxLx582LKlCmNfj5/+MMf4je/+U3svPPO0atXr3jjjTfWuu4NN9wQp5xySnz3u9+N0aNHx8yZM+PMM8+MZcuWxbnnnrvW17322msxYMCAaNOmzRqfX7FiRbz++uuxfPnyTNbbfvvt15odmi0HNOrWW2/NRUTu8MMPz22++ea56urqes+PHDkyt9tuu+W23Xbb3EEHHVTvuYjI7brrrrmIyE2cOHGN233uuefqll144YW5iMh99NFHuVwul6uurs517Ngxt++++64x24cffrjG5ffcc08uInKPP/74On2O1113Xe68885b43Off/55bquttsp0PQBgw3v77bdzHTp0yPXu3Tv3/vvvr/b8m2++mbvmmmvqPl7b7FNRUdHovvbee+/c4Ycfnjv77LNzPXv2XOM6I0aMyLVv377estra2tzXvva1XFFRUW7BggWN7mfBggW5ZcuW5XK5XK6ioiK3tl+Bli1bluvcufNqn89xxx2Xa9++fe6TTz5Z6z5eeeWV3JAhQ9b6/J577pl78803M1sPNiSXP0ATHHPMMfHPf/4zpk+fXrdsxYoV8fvf/z6OPfbYtb5uyJAh8Y1vfCOuuuqqeqcMrouPP/44KisrY8iQIWt8vkuXLk3aHgDA2lx11VWxZMmSuPnmm6Nbt26rPb/DDjvEqFGjmr2ff/zjHzFz5sw4+uij4+ijj46//e1v8dRTT63Ta4uKiuLrX/965HK5ePvttxtdv2vXrqudJbEmjz/+ePzzn/+M0047rd7yioqKWLp0aTz88MPrlA9aGqUCNMF2220XgwcPjjvuuKNu2SOPPBKLFi2Ko48+usHXjh8/Pj788MOYNGlSk/bZpUuXKCsri4ceeig++eSTpNwAAOvioYceil69esVee+3VrO0sX748Pv7443qPqqqquufvuOOOaN++fRx88MGxxx57xPbbb79OlzKssurSyE033bRZOb/oxRdfjIiIQYMG1Vu+2267RXFxcd3zQH1KBWiiY489Nu6///66Mw6mTJkSQ4cOje7duzf4uv/4j/+IYcOGxdVXX92ksxWKi4tjzJgx8cILL8Q222wT3/rWt+Lyyy+POXPmNOvzAAD4osrKynjvvfeif//+zd7WzTffHFtssUW9xxf/KDNlypQ49NBD684gOOqoo+Luu++OlStXrnF7q4qJefPmxcSJE+Pee++Nfv36xY477tjsrKt88MEHUVJSstpZoG3atInOnTvH+++/v972BV8mSgVooiOPPDI+//zzmDZtWixevDimTZvW4KUPXzR+/PhYsGBBTJ48uUn7vOiii2Lq1KkxYMCAePTRR+O8886L3XbbLQYOHLjWuyUDADRFZWVlRESUl5c3e1uHHnpoTJ8+vd5j//33j4iIv/zlL/HKK6/EMcccU7f+McccEx9//HE8+uijq21r6dKldcXEDjvsEOecc04MGTIkHnjggUbfyaEpPv/887Xe8LBt27ZNvoQVWgrv/gBNtMUWW8Tw4cNj6tSpsWzZsqipqYnvfe976/TavffeO4YNGxZXXXVVnHLKKU3a7zHHHBPHHHNMVFZWxjPPPBO33XZbTJ06NQ455JB49dVXo23btimfDgBARER07NgxIiIWL17c7G1tvfXWMXz48DU+97vf/S7at28fvXr1irfeeisi/vVL+3bbbRdTpkyJgw46qN76bdu2jYceeigiIt5999246qqrYuHChfXuk7BkyZJYsmRJ3cclJSWxxRZbNClzWVlZrFixYo3PLV++fJ3uywAtkVIBEhx77LExcuTIWLBgQRx44IGxySabrPNrL7zwwthnn33ihhtuaNLrVunYsWPsu+++se+++0br1q3j9ttvj2eeeSaGDh3a5G0BAKzSsWPH6N69e7z66qsbbB+5XC7uuOOOWLp0afTt23e15xcuXBhLliyJDh061C0rKSmpV1Dsv//+0bt37/jRj34UDz74YET86+23L7roorp1tt122ya/JXW3bt2ipqYmFi5cWO8SiBUrVsQ///nPRi91hZbK5Q+Q4Dvf+U4UFxfH7Nmz1/nSh1WGDh0a++yzT1x55ZXNPo1u1Y2EPvjgg2ZtBwAgIuLggw+OefPmxdNPP71Btj9jxox499134+KLL4577rmn3uPGG2+MZcuWxf3339/gNrp16xZnn312PPTQQzF79uyIiDjhhBPqXWrRlJs+rrLrrrtGRMTzzz9fb/nzzz8ftbW1dc8D9TlTARJ06NAhJk2aFO+8804ccsghTX79+PHjY5999okbb7yx0XWXLVsWL7/8cgwePHi15x555JGIiPV6kyIAoOX6yU9+ElOmTImTTz45/vSnP0XXrl3rPT9v3ryYNm1a8ttKrrr0YcyYMWu8dPPqq6+OKVOmxPHHH9/gds4444y4+uqr44orroj7778/evXqFb169UrKtMo3vvGN2GyzzWLSpEnxrW99q275pEmTol27dqtdlgH8i1IBEo0YMSL5tUOHDo2hQ4fGjBkzGl132bJlsddee8XXvva1OOCAA6JHjx7x2Wefxf333x8zZ86Mww47LAYMGJCcBQBgle233z6mTp0aRx11VPTp0ydOOOGE6NevX6xYsSKeeuqpuOeee+LEE09M2nZVVVXce++9se+++671XlDf/va349prr13tEoR/17lz5zjppJPi17/+dbz++uvRp0+fta7797//PX77299GxP+dhXDppZdGxL8uk/j+978fEf+6p8Ill1wSFRUVccQRR8T+++8fM2fOjN/97ndx2WWXxWabbZb0ecOXnVIBMjJ+/PgYNmxYo+ttsskmcdNNN8XDDz8ct956ayxYsCBKSkpixx13jKuvvjrOPPPMjZAWAGgpvv3tb8df/vKXuPrqq+OBBx6ISZMmRWlpaey8884xceLEGDlyZNJ2H3744fjss88aPMvzkEMOiYkTJ8add97Z6IwzevTomDx5clx55ZVx2223rXW9v/3tb3H++efXW7bq46FDh9aVChERp512WrRu3TomTpwYDz74YPTo0SN+8YtfJJ+ZAS2BUgHWwYknnrhOrfyabgiUy+XWuO4+++yzxufGjx8f48ePr/u4VatWcfLJJ8fJJ5+8rnEjIuJ73/veWvcNANCQr3zlK+t0mWZTZp/DDz+80dlk6NCh9da57bbb1loY9OrVK1auXNloxrXNXGszcuTI5OIEWiI3agQAAACSOFMBqPOzn/0srr/++jU+98W3dspqPQCAfDV79uy1vl34kiVLMl8PNpSinPOjAQAAgAQufwAAAACSKBUAAACAJEoFAAAAIElB36ixtrY23n///SgvL4+ioqKs4wBQwHK5XCxevDi6d+8excU6dwqT2QiA9WVdZ6OCLhXef//96NGjR9YxAPgSmT9/fmy99dZZx4AkZiMA1rfGZqOCLhXKy8sjImKfyx6MVm3bZ5xmzaacOCjrCI2qXlmbdYQGtW6V/38xrK3N7zdRqcnzfBH5/++8sia//59E5P+/c2nrkqwjNGhxZWXs0LNH3c8WKESrvn7b9B0RRSVtMk6zZtOnXpB1hEbl+2y07Rb5Ofd+0fuffp51hAZ17lCadYRGVeX57PFenv8bR0Qs/Hx51hEa1KWsbdYRGrRsyeI4atjOjc5GBV0qrDqtr1Xb9tGqLD+/uXbs2DHrCI3K9x+c+f7LZoRSYX3I939npULz5XupsIpTxilkq75+i0ra5G2p0KE8/2ejFXk+G5V3zM+594s6rGyddYQGlZfnf6nQJs+/DttX5/+vku1K8vvrsH2elwqrNDYb5fcUDwAAAOQtpQIAAACQRKkAAAAAJFEqAAAAAEmUCgAAAEASpQIAAACQRKkAAAAAJFEqAAAAAEmUCgAAAEASpQIAAACQRKkAAAAAJFEqAAAAAEmUCgAAAECSvCgVfvWrX8V2220Xbdu2jT333DOeffbZrCMBAGTGbARAoci8VLjrrrti9OjRceGFF8acOXNil112if333z8WLlyYdTQAgI3ObARAIcm8VPj5z38eI0eOjJNOOin69u0bkydPjnbt2sUtt9ySdTQAgI3ObARAIcm0VFixYkW88MILMXz48LplxcXFMXz48Hj66aczTAYAsPGZjQAoNK2y3PnHH38cNTU10bVr13rLu3btGn/9619XW7+qqiqqqqrqPq6srNzgGQEANhazEQCFJvPLH5piwoQJ0alTp7pHjx49so4EAJAZsxEAWcu0VNh8882jpKQkPvzww3rLP/zww9hyyy1XW3/cuHGxaNGiusf8+fM3VlQAgA3ObARAocm0VGjTpk3stttu8dhjj9Utq62tjcceeywGDx682vqlpaXRsWPHeg8AgC8LsxEAhSbTeypERIwePTpGjBgRgwYNij322COuueaaWLp0aZx00klZRwMA2OjMRgAUksxLhaOOOio++uijuOCCC2LBggWx6667xh//+MfVblAEANASmI0AKCSZlwoREaeffnqcfvrpWccAAMgLZiMACkVBvfsDAAAAkD+UCgAAAEASpQIAAACQRKkAAAAAJFEqAAAAAEmUCgAAAEASpQIAAACQRKkAAAAAJFEqAAAAAEmUCgAAAEASpQIAAACQRKkAAAAAJFEqAAAAAElaZR1gfZhy4qDo2LFj1jHWaNPdT886QqP++cx1WUdo0Mqa2qwjNKq4qCjrCA1q3Sr/+8Pa2lzWERqU7//GERHFJfmfEdg4pk+9IDqU5+dsNOah17KO0KirD9kp6wgNqqrO/9ko33Usy/9fg95euDTrCA3qsVm7rCM0qkt1adYRGnTLC+9mHaFBVcuWrNN6+f+bBgAAAJCXlAoAAABAEqUCAAAAkESpAAAAACRRKgAAAABJlAoAAABAEqUCAAAAkESpAAAAACRRKgAAAABJlAoAAABAEqUC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nKnwv0aPHh0jRoyIQYMGxR577BHXXHNNLF26NE466aSsoxWEioqKmDp1ajzwwANRXl4eCxYsiIiITp06RVlZWcbp8l95eflq11i2b98+Onfu7NrLJjj77LNjr732issvvzyOPPLIePbZZ+PGG2+MG2+8MetoBeGQQw6Jyy67LLbZZpvYaaed4sUXX4yf//zn8YMf/CDraEAGzEbNYzZqPvNR85mNms98tA5y1Lnuuuty22yzTa5Nmza5PfbYIzd79uysIxWMiFjj49Zbb806WsEaOnRobtSoUVnHKDgPPfRQrl+/frnS0tJc7969czfeeGPWkQpGZWVlbtSoUbltttkm17Zt21yvXr1y5513Xq6qqirraEBGzEbpzEYbhvmo6cxGzWM+alxRLpfLZVNnAAAAAIXMPRUAAACAJEoFAAAAIIlSAQAAAEiiVAAAAACSKBUAAACAJEoFAAAAIIlSAQAAAEiiVAAAAACSKBXgS+bEE0+Mww47rO7jffbZJ84666yNnuOJJ56IoqKi+Oyzzzb6vgEAVjEbwYalVICN5MQTT4yioqIoKiqKNm3axA477BAXX3xxrFy5coPu97//+7/jkksuWad1/bADADYWsxF8ObTKOgC0JAcccEDceuutUVVVFX/4wx+ioqIiWrduHePGjau33ooVK6JNmzbrZZ+bbbbZetkOAMD6ZjaCwudMBdiISktLY8stt4xtt902Tj311Bg+fHg8+OCDdaflXXbZZdG9e/fYcccdIyJi/vz5ceSRR8Ymm2wSm222WRx66KHxzjvv1G2vpqYmRo8eHZtsskl07tw5fvKTn0Qul6u3z38/xa+qqirOPffc6NGjR5SWlsYOO+wQN998c7zzzjsxbNiwiIjYdNNNo6ioKE488cSIiKitrY0JEyZEz549o6ysLHbZZZf4/e9/X28/f/jDH+KrX/1qlJWVxbBhw+rlBABYE7MRFD6lAmSorKwsVqxYERERjz32WMydOzemT58e06ZNi+rq6th///2jvLw8Zs6cGX/+85+jQ4cOccABB9S9ZuLEiXHbbbfFLbfcErNmzYpPPvkk7rvvvgb3ecIJJ8Qdd9wRv/zlL+P111+PG264ITp06BA9evSIe++9NyIi5s6dGx988EFce+21ERExYcKE+K//+q+YPHlyvPbaa3H22WfH8ccfHzNmzIiIf/2AP/zww+OQQw6Jl156KU4++eQYO3bshjpsAMCXlNkIClAO2ChGjBiRO/TQQ3O5XC5XW1ubmz59eq60tDR3zjnn5EaMGJHr2rVrrqqqqm793/72t7kdd9wxV1tbW7esqqoqV1ZWlnv00UdzuVwu161bt9xVV11V93x1dXVu6623rttPLpfLDR06NDdq1KhcLpfLzZ07NxcRuenTp68x4+OPP56LiNynn35at2z58uW5du3a5Z566ql66/7whz/MHXPMMblcLpcbN25crm/fvvWeP/fcc1fbFgDAKmYj+HJwTwXYiKZNmxYdOnSI6urqqK2tjWOPPTbGjx8fFRUV0b9//3rXCr788svx1ltvRXl5eb1tLF++PObNmxeLFi2KDz74IPbcc8+651q1ahWDBg1a7TS/VV566aUoKSmJoUOHrnPmt956K5YtWxb77rtvveUrVqyIAQMGRETE66+/Xi9HRMTgwYPXeR8AQMtkNoLCp1SAjWjYsGExadKkaNOmTXTv3j1atfq//4Lt27evt+6SJUtit912iylTpqy2nS222CJp/2VlZU1+zZIlSyIi4uGHH46tttqq3nOlpaVJOQAAIsxG8GWgVICNqH379rHDDjus07oDBw6Mu+66K7p06RIdO3Zc4zrdunWLZ555Jvbee++IiFi5cmW88MILMXDgwDWu379//6itrY0ZM2bE8OHDV3t+1V8Dampq6pb17ds3SktL4x//+MdaW/w+ffrEgw8+WG/Z7NmzG/8kAYAWzWwEhc+NGiFPHXfccbH55pvHoYceGjNnzoy//e1v8cQTT8SZZ54Z7777bkREjBo1Kq644oq4//77469//WucdtppDb6P8nbbbRcjRoyIH/zgB3H//ffXbfPuu++OiIhtt902ioqKYtq0afHRRx/FkiVLory8PM4555w4++yz4/bbb4958+bFnDlz4rrrrovbb789IiJOOeWUePPNN2PMmDExd+7cmDp1atx2220b+hABAC2I2Qjyk1IB8lS7du3iySefjG222SYOP/zw6NOnT/zwhz+M5cuX17XzP/7xj+P73/9+jBgxIgYPHhzl5eXxne98p8HtTpo0Kb73ve/FaaedFr17946RI0fG0qVLIyJiq622iosuuijGjh0bXbt2jdNPPz0iIi655JI4//zzY8KECdGnT5844IAD4uGHH46ePXtGRMQ222wT9957b9x///2xyy67xOTJk+Pyyy/fgEcHAGhpzEaQn4pya7trCQAAAEADnKkAAAAAJFEqAAAAAEmUCgAAAEASpQIAAACQRKkAAAAAJFEqAAAAAEmUCgAAAEASpQIAAACQRKkAAAAAJFEqAAAAAEmUCgAAAEASpQIAAACQ5P8DahuW+KXC3v8AAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
